home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / machines / amiga68k / libsrc / stdio / fread.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-20  |  727 b   |  25 lines

  1. #include <stdio.h>
  2.  
  3. size_t fread(void *ptr,size_t size,size_t nmemb,FILE *f)
  4. {
  5.     size_t total=size*nmemb;char *p=ptr;long result;
  6.     if(!f||!total) return(0);
  7.     if((f->flags&(_READABLE|_WRITE|_ERR|_EOF))!=_READABLE) return(0);
  8.     f->flags|=_READ;
  9.     if(f->count){
  10.     /*  Buffer lesen    */
  11.         if(total<=f->count){
  12.             memcpy(p,f->pointer,total);
  13.             f->pointer+=total;f->count-=total;
  14.             return(total);
  15.         }else{
  16.             memcpy(p,f->pointer,f->count);
  17.             total-=f->count;p+=f->count;
  18.             f->count=0;
  19.         }
  20.     }
  21.     result=Read(f->filehandle,p,total);
  22.     if(result==-1){f->flags|=_ERR;return((p-(char *)ptr)/size);}
  23.     return((p+total-(char *)ptr)/size);
  24. }
  25.